// 注意 先创建虚拟头节点 dummy，且 dummy.Next = head。防止当链表头节点head为待删除节点时，删除该节点后链表头head为空的情况（边界情况）
// 如果我们能得到倒数第n个节点的前驱节点而不是倒数第n个节点，那么删除操作会更加方便。因此我们可以考虑在初始时创建 快慢指针 fast和 slow，并将这两个指针指向哑节点 dummy，其余操作不变。这样一来，当 fast遍历到链表末尾时，slow的下一个节点就是我们需要删除的节点。
// 快指针先走n步，然后快指针和慢指针再每次各走一步
// 删除倒数第n个节点：slow.Next = slow.Next.Next，注意不是 slow.Next = fast
// 最后返回虚拟头节点的后继节点：dummy.Next

import java.util.Scanner;

public class removeNthFromEnd {
    // 定义链表
    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }

    // 删除倒数第n个节点
    public static ListNode removeNthFromEndm(ListNode head, int n) {
        // 创建虚拟头节点
        ListNode dummy = new ListNode(0, head);
        // 创建快慢指针
        ListNode fast = dummy;
        ListNode slow = dummy;
        // 快指针先走n步
        for(int i = 0; i < n; i++){
            fast = fast.next;
        }
        // 快慢指针再每次各走一步
        while(fast.next != null){
            // 快指针和慢指针再每次各走一步
            fast = fast.next;
            slow = slow.next;
        }
        // 删除倒数第n个节点
        slow.next = slow.next.next;
        // 返回虚拟头节点的后继节点
        return dummy.next;
    }
    
    // 主函数
    public static void main(String[] args) {
        // 输入
        Scanner sc = new Scanner(System.in);
        // 输入链表
        String s = sc.nextLine();
        // 按照空格分割
        String[] s1 = s.split(" ");
        // 创建链表
        ListNode head = new ListNode(Integer.parseInt(s1[0]));
        ListNode p = head;
        for(int i =1; i < s1.length; i++){
            // 创建新节点
            p.next = new ListNode(Integer.parseInt(s1[i]));
            // 更新当前节点
            p = p.next;
        }
        // 输入n
        int n = sc.nextInt();
        // 删除倒数第n个节点
        ListNode result = removeNthFromEndm(head, n);
        // 输出结果
        while(result != null){
            // 输出当前节点的值
            System.out.print(result.val + " ");
            // 更新当前节点
            result = result.next;
        }
        // 关闭Scanner
        sc.close();
    }
}
